Arquitetura da Solução
Este projeto tem como objetivo capturar imagens de árvores em diferentes áreas utilizando drones, processar essas imagens através de um modelo de visão computacional (YOLO) e retornar a quantidade de árvores identificadas em cada imagem.
Visão Geral
A arquitetura da solução é dividida em várias camadas e componentes que interagem para fornecer uma solução robusta e escalável. A seguir, descrevemos os principais componentes e o fluxo de dados entre eles.
Camadas e Componentes
1. Frontend
- Streamlit: Utilizado para construir a interface gráfica do usuário (GUI), onde os usuários podem visualizar e interagir com os resultados. Streamlit é responsável por receber entradas do usuário e exibir os resultados das análises feitas pelo modelo.
2. Backend
- Firebase: Responsável pela autenticação dos usuários que acessam a aplicação.
- Kong: Atua como uma API Gateway, gerenciando o tráfego de entrada, assegurando a segurança e gerenciando o roteamento de requisições entre os serviços.
- Kafka: Utilizado como sistema de mensageria, garantindo a escalabilidade e a robustez na comunicação entre os serviços. Após a execução do modelo YOLO, os resultados são enviados para Kafka para evitar sobrecarregar o banco de dados.
- PostgreSQL: Base de dados utilizada para armazenar os resultados finais das previsões feitas pelo modelo, incluindo detalhes das áreas de terra analisadas. O armazenamento é realizado após os resultados serem processados pelo serviço que consome as mensagens da fila Kafka.
3. ETL (Extract, Transform, Load)
- Polars: Biblioteca de manipulação de dados usada para o processamento eficiente de grandes volumes de dados. Aqui, as imagens são processadas e transformadas antes de serem enviadas para o modelo de previsão.
- Rust: Utilizado para construir pipelines de ETL robustos e de alto desempenho. O pipeline em Rust busca as imagens armazenadas no bucket S3, processa essas imagens e executa o modelo YOLO para identificar as árvores.
4. Edge Layer
- Go: Linguagem utilizada para criar a camada de borda que se comunica diretamente com dispositivos embarcados e com o pipeline de ETL. Esta camada recebe as imagens capturadas pelos drones e as envia para o pipeline de processamento.
5. Embarcado
- Raspberry Pi: Dispositivo embarcado utilizado para capturar as imagens no campo. Ele se comunica com a camada de borda para enviar as imagens capturadas.
- Rust: Também utilizado no Raspberry Pi para gerenciar a captura de imagens e a comunicação com a camada de borda. A escolha do Rust deve-se ao seu alto desempenho e controle de baixo nível sobre o hardware.
Fluxo de Dados
- Captura de Imagem: O drone, equipado com um Raspberry Pi, captura as imagens das áreas de interesse. Essas imagens são processadas pelo dispositivo Raspberry Pi e enviadas para a camada de borda.
- Envio para ETL: A camada de borda (Go) recebe as imagens e as envia para o pipeline de ETL.
- Processamento ETL e Execução do Modelo YOLO: As imagens são processadas utilizando Polars e Rust. Em seguida, o modelo YOLO é executado para identificar as árvores nas imagens.
- Envio para Kafka: Os resultados das previsões feitas pelo YOLO são enviados para a fila Kafka para evitar sobrecarregar o banco de dados.
- Armazenamento no Banco de Dados: Um serviço consome as mensagens da fila Kafka e armazena os resultados no banco de dados PostgreSQL.
- Exibição dos Resultados: O frontend (Streamlit) exibe a quantidade de árvores identificadas em cada área analisada, com base nas previsões armazenadas.
Considerações Finais
Esta arquitetura foi desenhada para garantir a escalabilidade, segurança e eficiência no processamento e análise das imagens capturadas por drones. O uso de tecnologias como Rust, Go, Kafka, PostgreSQL e do modelo YOLO assegura que o sistema possa lidar com grandes volumes de dados e requisições em tempo real, enquanto gerencia eficientemente o fluxo de dados para evitar sobrecargas.